from dataclasses import dataclass
from typing import List


@dataclass
class HighestRankedEntry:
    """
    召唤师在排位赛中的最高段位信息
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class HighestRankedEntrySR:
    """
    召唤师在排位赛（Solo/Duo排位赛）中的最高段位信息
    "SR" 可能是指 "Solo/Duo Ranked"
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class QueueMapCHERRY:
    """
    某个特定队列（可能是命名为 "CHERRY"）中的排位信息映射。
    不同的队列可能具有不同的排位系统和排位规则，因此需要单独的类来表示每个队列的排位信息。
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class QueueMapRANKEDFLEXSR:
    """
    在 "Flex" 排位赛中的召唤师的排位信息映射。
    "Flex" 排位赛是一种队伍排位模式，允许玩家组队参加排位赛，与其他队伍进行竞争。
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class QueueMapRANKEDSOLO5X5:
    """
    在 "Solo/Duo 5v5" 排位赛中的召唤师的排位信息映射。
    "Solo/Duo 5v5" 排位赛是一种个人排位模式。
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class QueueMapRANKEDTFT:
    """
    在 "Teamfight Tactics (TFT)" 排位赛中的召唤师的排位信息映射。
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class QueueMapRANKEDTFTDOUBLEUP:
    """
    在 "Teamfight Tactics (TFT) Double Up" 排位赛中的召唤师的排位信息映射
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class QueueMapRANKEDTFTTURBO:
    """
    在 "Teamfight Tactics (TFT) Turbo" 排位赛中的召唤师的排位信息映射。
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class QueueMap:
    """
    存储不同排位队列的排位信息映射，每个属性对应一种特定队列.
    """
    CHERRY: QueueMapCHERRY  # CHERRY队列的排位信息映射
    RANKEDFLEXSR: QueueMapRANKEDFLEXSR  # 灵活排位赛队列的排位信息映射
    RANKEDSOLO5x5: QueueMapRANKEDSOLO5X5  # 单人/双人 5v5 排位赛队列的排位信息映射
    RANKEDTFT: QueueMapRANKEDTFT  # Teamfight Tactics (TFT) 排位赛队列的排位信息映射
    RANKEDTFTDOUBLEUP: QueueMapRANKEDTFTDOUBLEUP  # Teamfight Tactics (TFT) Double Up 排位赛队列的排位信息映射
    RANKEDTFTTURBO: QueueMapRANKEDTFTTURBO  # Teamfight Tactics (TFT) Turbo 排位赛队列的排位信息映射


@dataclass
class Queue:
    """
    该类用于表示一种特定排位赛队列中召唤师的排位信息。
    通过实例化该类并设置相应属性值，可以表示某个召唤师在某个排位赛队列中的排位情况，
    包括当前赛季的段位、历史最高段位、联盟点数、胜利场次、失败场次等信息。
    """
    division: str  # 当前赛季段位
    highestDivision: str  # 历史最高段位
    highestTier: str  # 历史最高等级
    isProvisional: bool  # 是否为预选赛状态
    leaguePoints: int  # 联盟点数
    losses: int  # 失败场次
    miniSeriesProgress: str  # 小系列赛进度
    previousSeasonEndDivision: str  # 上个赛季结束时段位
    previousSeasonEndTier: str  # 上个赛季结束时等级
    previousSeasonHighestDivision: str  # 上个赛季历史最高段位
    previousSeasonHighestTier: str  # 上个赛季历史最高等级
    provisionalGamesRemaining: int  # 预选赛剩余场次
    provisionalGameThreshold: int  # 预选赛门槛
    queueType: str  # 排位类型
    ratedRating: int  # 评级分数
    ratedTier: str  # 评级等级
    tier: str  # 等级
    warnings: None  # 警告
    wins: int  # 胜利场次


@dataclass
class SeasonsCHERRY:
    """
     CHERRY 队列的赛季信息，包括当前赛季结束时间戳、当前赛季ID以及下个赛季开始时间戳。
    """
    currentSeasonEnd: int  # 当前赛季结束时间戳
    currentSeasonId: int  # 当前赛季ID
    nextSeasonStart: int  # 下个赛季开始时间戳


@dataclass
class SeasonsRANKEDFLEXSR:
    """
    灵活排位赛队列（RANKEDFLEXSR）的赛季信息
    """
    currentSeasonEnd: int  # 当前赛季结束时间戳
    currentSeasonId: int  # 当前赛季ID
    nextSeasonStart: int  # 下个赛季开始时间戳


@dataclass
class SeasonsRANKEDSOLO5X5:
    """
    单人/双人 5v5 排位赛队列（RANKEDSOLO5X5）的赛季信息
    """
    currentSeasonEnd: int  # 当前赛季结束时间戳
    currentSeasonId: int  # 当前赛季ID
    nextSeasonStart: int  # 下个赛季开始时间戳


@dataclass
class SeasonsRANKEDTFT:
    """
    Teamfight Tactics (TFT) 排位赛队列（RANKEDTFT）的赛季信息
    """
    currentSeasonEnd: int  # 当前赛季结束时间戳
    currentSeasonId: int  # 当前赛季ID
    nextSeasonStart: int  # 下个赛季开始时间戳


@dataclass
class SeasonsRANKEDTFTDOUBLEUP:
    """
    Teamfight Tactics (TFT) Double Up 排位赛队列（RANKEDTFTDOUBLEUP）的赛季信息
    """
    currentSeasonEnd: int  # 当前赛季结束时间戳
    currentSeasonId: int  # 当前赛季ID
    nextSeasonStart: int  # 下个赛季开始时间戳


@dataclass
class SeasonsRANKEDTFTTURBO:
    """
     Teamfight Tactics (TFT) Turbo 排位赛队列（RANKEDTFTTURBO）的赛季信息
    """
    currentSeasonEnd: int  # 当前赛季结束时间戳
    currentSeasonId: int  # 当前赛季ID
    nextSeasonStart: int  # 下个赛季开始时间戳


@dataclass
class Seasons:
    """
    存储不同排位队列的赛季信息，每个属性对应一种特定队列的赛季信息
    """
    CHERRY: SeasonsCHERRY  # CHERRY队列的赛季信息
    RANKEDFLEXSR: SeasonsRANKEDFLEXSR  # 灵活排位赛队列的赛季信息
    RANKEDSOLO5x5: SeasonsRANKEDSOLO5X5  # 单人/双人 5v5 排位赛队列的赛季信息
    RANKEDTFT: SeasonsRANKEDTFT  # Teamfight Tactics (TFT) 排位赛队列的赛季信息
    RANKEDTFTDOUBLEUP: SeasonsRANKEDTFTDOUBLEUP  # Teamfight Tactics (TFT) Double Up 排位赛队列的赛季信息
    RANKEDTFTTURBO: SeasonsRANKEDTFTTURBO  # Teamfight Tactics (TFT) Turbo 排位赛队列的赛季信息


@dataclass
class SplitsProgress:
    """
    该类用于表示赛季分段进度的信息，包括当前赛季的第二阶段进度。
    """
    the2: int  # 第二阶段进度


@dataclass
class RankedStats:
    """
    玩家的排位统计信息，包括当前赛季分段点数、已获得的奖章奖励ID列表、最高排名条目、排位地图、排位列表、赛季信息和分段进度信息等。
    """
    currentSeasonSplitPoints: int  # 当前赛季分段点数
    earnedRegaliaRewardIds: List[str]  # 已获得的奖章奖励ID列表
    highestCurrentSeasonReachedTierSR: str  # 当前赛季达到的最高等级（SR版本）
    highestPreviousSeasonEndDivision: str  # 上个赛季结束时的最高段位
    highestPreviousSeasonEndTier: str  # 上个赛季结束时的最高等级
    highestRankedEntry: HighestRankedEntry  # 最高排名条目
    highestRankedEntrySR: HighestRankedEntrySR  # 最高排名条目（SR版本）
    previousSeasonSplitPoints: int  # 上个赛季分段点数
    queueMap: QueueMap  # 排位地图
    queues: List[Queue]  # 排位列表
    rankedRegaliaLevel: int  # 排位奖章等级
    seasons: Seasons  # 赛季信息
    splitsProgress: SplitsProgress  # 分段进度信息

    def __str__(self):
        return (f"Ranked Stats Info:\n"
                f"  Current Season Split Points: {self.currentSeasonSplitPoints}\n"
                f"  Highest Current Season Reached Tier (SR): {self.highestCurrentSeasonReachedTierSR}\n"
                f"  Highest Previous Season End Division: {self.highestPreviousSeasonEndDivision}\n"
                f"  Highest Previous Season End Tier: {self.highestPreviousSeasonEndTier}\n"
                f"  Previous Season Split Points: {self.previousSeasonSplitPoints}\n"
                f"  Ranked Regalia Level: {self.rankedRegaliaLevel}\n"
                )
